﻿using System;
using System.Text;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using System.ComponentModel;
using System.Collections.Generic;

namespace GUI.Catalog
{
    using GUI.Library;
    using WS.DAL.Entities;

    using DevExpress.XtraEditors;

    public partial class FrmNSX : GUI.FrmInput
    {
        #region Implements
        #endregion

        protected override void PerformEdit()
        {
            var tmpId = gvDS.GetFocusedRowCellValue("Id");
            if (tmpId == null)
            {
                XtraMessageBox.Show(STR_CHOICE_E,
                    Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            base.PerformEdit();
        }

        protected override void PerformDelete()
        {
            var tmpId = gvDS.GetFocusedRowCellValue("Id");
            if (tmpId == null)
            {
                XtraMessageBox.Show(STR_CHOICE,
                    Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            var text = gvDS.GetFocusedRowCellValue("Ten");
            var id = (Guid)tmpId;

            if (id == new Guid())
                XtraMessageBox.Show(STR_SELECT.ToUpper(), STR_DELETE.ToUpper(),
                MessageBoxButtons.OK, MessageBoxIcon.Information);
            else
            {
                var cfm = String.Format(STR_CONFIRM, text);
                var oki = XtraMessageBox.Show(cfm.ToUpper(), STR_DELETE.ToUpper(), MessageBoxButtons.OKCancel);

                if (oki == DialogResult.OK)
                {

                    if (_bllCat.Danhmuc_Delete(id).ToInt32() == 1) PerformRefresh();
                    else XtraMessageBox.Show(STR_UNDELETE.ToUpper(), STR_DELETE.ToUpper(),
                        MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }

            base.PerformDelete();
        }

        protected override void PerformRefresh()
        {
            LoadData();

            if (_dtb != null)
            {
                ClearDataBindings();
                if (_dtb.Rows.Count > 0) DataBindingControl();
            }

            ReadOnlyControl();

            base.PerformRefresh();
        }

        protected override void PerformSave()
        {
            if (!ValidInput())
            {
                XtraMessageBox.Show("Cần nhập dữ liệu cho tên nhà sản xuấ trước", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            switch (_state)
            {
                case State.Add:
                    if (InsertObject())
                    {
                        ResetInput();
                        LoadData();
                        txtMa.Text = _bllCat.Danhmuc_Layma(_name);
                        XtraMessageBox.Show("Lưu thành công!", "Lưu", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        txtTen.Focus();
                    }
                    break;

                case State.Edit:
                    if (UpdateObject())
                    {
                        ChangeStatus();
                        ReadOnlyControl();
                        PerformRefresh();
                        XtraMessageBox.Show("Lưu thành công!", "Lưu", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    break;

                default:
                    break;
            }
            base.PerformSave();
        }

        protected override void ResetInput()
        {
            txtMa.Text = null;
            txtTen.Text = null;
            txtGhichu.Text = null;

            base.ResetInput();
        }

        protected override void ClearDataBindings()
        {
            txtMa.DataBindings.Clear();
            txtTen.DataBindings.Clear();
            txtGhichu.DataBindings.Clear();

            base.ClearDataBindings();
        }

        protected override void DataBindingControl()
        {
            txtMa.DataBindings.Add("EditValue", _dtb, ".Ma");
            txtTen.DataBindings.Add("EditValue", _dtb, ".Ten");
            txtGhichu.DataBindings.Add("EditValue", _dtb, ".Ghichu");

            base.DataBindingControl();
        }

        protected override void ReadOnlyControl(bool isReadOnly = true)
        {
            txtTen.Properties.ReadOnly = isReadOnly;
            txtGhichu.Properties.ReadOnly = isReadOnly;

            gcDS.Enabled = isReadOnly;

            base.ReadOnlyControl(isReadOnly);
        }

        protected override bool UpdateObject()
        {
            try
            {
                if (!ValidInput()) return false;

                var id = (Guid)gvDS.GetFocusedRowCellValue("Id");

                var o = new Danhmuc()
                {
                    Id = id,
                    Ma= _bllCat.Danhmuc_Layma(_name),
                    Loai = _name,
                    Ten = txtTen.Text.ToUpperFirst(),
                    Ghichu = txtGhichu.Text.ToUpperFirst()
                };

                if (_bllCat.Danhmuc_Update(o).ToInt32() == 1)
                    return true;
                else
                {
                    XtraMessageBox.Show("Kết nối tới cơ sỡ dữ liệu có vấn đề","Lổi khi cập nhận dữ liệu",MessageBoxButtons.OK,MessageBoxIcon.Error);
                    return false;
                }
            }
            catch { return false; }
        }

        protected override void PerformAdd()
        {
            base.PerformAdd();
            txtMa.Text = _bllCat.Danhmuc_Layma(_name);
        }

        protected override bool InsertObject()
        {
            try
            {
                if (!ValidInput()) return false;

                var o = new Danhmuc()
                {
                    Id = Guid.NewGuid(),
                    Ma=_bllCat.Danhmuc_Layma(_name),
                    Id_Parent = Guid.Empty,
                    Loai = _name,
                    Ten = txtTen.Text.ToUpperFirst(),
                    Ghichu = txtGhichu.Text.ToUpperFirst()
                };

                if (_bllCat.Danhmuc_Insert(o).ToInt32() !=null)
                    return true;
                else
                {
                    XtraMessageBox.Show("Kết nối tới cơ sỡ dữ liệu có vấn đề", "Lổi khi thêm dữ liệu", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return false;
                }
            }
            catch { return false; }
        }

        protected override void LoadData()
        {
            _dtb = _bllCat.Danhmuc_Select_Loai(_name);

            if (_dtb != null)
            {
                gcDS.DataSource = _dtb;
                gvDS.BestFitColumns();
            }

            base.LoadData();
        }

        protected override bool ValidInput()
        {
            if (txtTen.Text.Trim() == "") return false;
            return true;
        }

        //#endregion

        #region Methods
        public FrmNSX()
        {
            InitializeComponent();

            _name = Name.Replace("Frm", "");
            _bllCat = new SV.Catalog();
            Text = "Nhà sản xuất";

            dockPanel1.SetDockPanel(Global.STR_PAN1);
            dockPanel2.SetDockPanel(Global.STR_PAN2);
        }
        #endregion

        #region Events
        /// <summary>
        /// Numbered
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void gvMain_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
        {
            if (e.Info.IsRowIndicator)
            {
                if (e.RowHandle < 0) return;

                e.Info.DisplayText = "" + (e.RowHandle + 1);
                e.Handled = false;
            }
        }
        #endregion

        #region Properties
        #endregion

        #region Fields
        string _name;
        #endregion

        #region Constants
        private const string STR_TITLE = "Nhà xản xuất";
        private const string STR_ADD = "Thêm " + STR_TITLE;
        private const string STR_EDIT = "Sửa " + STR_TITLE;
        private const string STR_DELETE = "Xoá " + STR_TITLE;

        private const string STR_SELECT = "Chọn dữ liệu!";
        private const string STR_CONFIRM = "Có xoá nhà xản xuất '{0}' không?";
        private const string STR_UNDELETE = "Không xoá được!\nDữ liệu đang được sử dụng.";
        private const string STR_DUPLICATE = "Vị trí này có rồi";

        private const string STR_CHOICE = "CHỌN DÒNG CẦN XOÁ\n\rHOẶC KHÔNG ĐƯỢC CHỌN NHÓM ĐỂ XOÁ";
        private const string STR_CHOICE_E = "CHỌN DÒNG CẦN SỬA\n\r HOẶC KHÔNG ĐƯỢC CHỌN NHÓM ĐỂ SỬA";
        #endregion
    }
}